Обработка изображений
Сегментация изображений
Пример – фотографии чеков
Сегментирование текста
Главной особенностью изображений чеков является темный текст на светлом фоне. Как вы можете использовать эту особенность?
Один из методов заключается в отделении текста от фона. Разделение изображения на отдельные части называется сегментированием изображения.
Изображение чека имеет узор из горизонтальных «полосок» темного текста, разделенных «полосками» светлой бумаги.
Бинаризация по пороговому значению интенсивности
Пороговое значение изображения с использованием логических операторов
Вы можете создать двоичное черно-белое изображение из изображения в оттенках серого, установив пороговые значения его интенсивности.
Элементам, которые меньше указанного порога, присваивается значение 0, а элементам больше порогового – значение 1.
В приведенном ниже примере изображение в оттенках серого было сегментировано с использованием порога, равного 1/4 от максимально возможной интенсивности 1.
cd(@__DIR__);
using Images, ImageShow
I = load("IMG_004.jpg");
gs = Gray.(I);
simshow(gs)
Задание 1
Поэлементные логические операторы, такие как .< и .>, при применении к массивам создают на выходе массив такого же размера, что и исходный, но содержащий логические значения 1 (true) или 0 (false).
Вы можете использовать логические операторы, задавая пороговые значения интенсивности изображения в оттенках серого, создавая таким образом двоичное изображение.
B = g .> thresh;
BW на основе изображения gs, установив пороговое пороговое значение бинаризации равным половине максимально возможной интенсивности (максимальная интенсивность равна 1).Отобразите
BW с помощью simshow.
Подсказка
Используйте .>, чтобы установить пороговое значение на уровне 0.5 и присвоить результат переменной BW.
Решение
BW = gs .> 0.5;
simshow(BW)
Автоматизация выбора порогового значения
Функции бинаризации
using Images, ImageShow, ImageBinarization
I = load("IMG_004.jpg");
gs = Gray.(I);
simshow(gs)
Задание 2
Изображения, сделанные при разном освещении, имеют разную контрастность и требуют разных пороговых значений. Это значение можно определить «вручную», например взглянув на гистограмму интенсивности изображения.
Но чтобы автоматизировать процесс выбора порога, вы можете использовать функцию otsu_threshold, которая вычисляет «наилучший» порог для заданного изображения.
gBinary = g .> otsu_threshold(g);
otsu_threshold для создания двоичного изображения BW из gs.Вызовите функцию
simshow для вывода изображения BW.
Подсказка
Используйте преобразованное изображение в оттенках серого gs в качестве входных данных для функции otsu_threshold.
Решение
BW = gs .> otsu_threshold(gs)
simshow(BW)
Задание 3
Для автоматизации бинаризации изображения вы также можете использовать функцию binarize.
В качестве аргумента, функция binarize также принимает название конкретного алгоритма, используемого для бинаризации.
gBinary = binarize(g, Alg())
binarize, передав в качестве параметра алгоритм Otsu() для создания бинарного изображения из gs.Сохраните результат в переменной
BW и выведите его на экран с помощью функции simshow.
Подсказка
Используйте преобразованное изображение в оттенках серого gs в качестве входных данных для функции binarize.
Решение
BW = binarize(gs, Otsu())
simshow(BW)